package com.gougou.manager.service.impl;


import com.baomidou.mybatisplus.service.impl.ServiceImpl;
import com.gougou.manager.mapper.TbItemCatDao;
import com.gougou.manager.pojo.ItemCatData;
import com.gougou.manager.pojo.ItemCatResult;
import com.gougou.manager.pojo.TbItemCat;
import com.gougou.manager.service.MPTbItemCatService;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * <p>
 * 商品类目 服务实现类
 * </p>
 *
 * @author ${author}
 * @since 2018-09-07
 */
@Service
public class TbItemCatServiceImpl extends ServiceImpl<TbItemCatDao, TbItemCat> implements MPTbItemCatService {

    /**
     * 全部查询，并且生成树状结构
     * @return
     */
    public ItemCatResult queryAllTree() {
        ItemCatResult result = new ItemCatResult();
        // 全部查出，并且在内存中生成树形结构
        List<TbItemCat> cats =super.selectList(null);

        // 转为map存储，key为父节点ID，value为数据集合
        Map<Long, List<TbItemCat>> itemCatMap = new HashMap<Long, List<TbItemCat>>();
        for (TbItemCat itemCat : cats) {
            if(!itemCatMap.containsKey(itemCat.getParentId())){
                itemCatMap.put(itemCat.getParentId(), new ArrayList<TbItemCat>());
            }
            itemCatMap.get(itemCat.getParentId()).add(itemCat);
        }

        // 封装一级对象
        List<TbItemCat> itemCatList1 = itemCatMap.get(0L);
        for (TbItemCat itemCat : itemCatList1) {
            ItemCatData itemCatData = new ItemCatData();
            itemCatData.setUrl("/products/" + itemCat.getId() + ".html");
            itemCatData.setName("<a href='"+itemCatData.getUrl()+"'>"+itemCat.getName()+"</a>");
            result.getItemCats().add(itemCatData);
            if(!itemCat.getIsParent()){
                continue;
            }

            // 封装二级对象
            List<TbItemCat> itemCatList2 = itemCatMap.get(itemCat.getId());
            List<ItemCatData> itemCatData2 = new ArrayList<ItemCatData>();
            itemCatData.setItems(itemCatData2);
            for (TbItemCat itemCat2 : itemCatList2) {
                ItemCatData id2 = new ItemCatData();
                id2.setName(itemCat2.getName());
                id2.setUrl("/products/" + itemCat2.getId() + ".html");
                itemCatData2.add(id2);
                if(itemCat2.getIsParent()){
                    // 封装三级对象
                    List<TbItemCat> itemCatList3 = itemCatMap.get(itemCat2.getId());
                    List<String> itemCatData3 = new ArrayList<String>();
                    id2.setItems(itemCatData3);
                    for (TbItemCat itemCat3 : itemCatList3) {
                        itemCatData3.add("/products/" + itemCat3.getId() + ".html|"+itemCat3.getName());
                    }
                }
            }
            //限制显示数量
            if(result.getItemCats().size() >= 14){
                break;
            }
        }
        return result;
    }
}
